package com.atguigu.xuexiplus.mapper;

import com.atguigu.xuexiplus.entity.Sitting;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.dynamic.datasource.annotation.DS;
import org.apache.ibatis.annotations.*;

import java.util.List;

/**
 * 坐姿检测Mapper
 * 使用云数据库（cloud）
 */
@DS("cloud")
@Mapper
public interface SittingMapper extends BaseMapper<Sitting> {

    /**
     * 查询所有坐姿检测记录（按时间倒序）
     */
    @Results(id = "SittingMap", value = {
            @Result(property = "id", column = "id"),
            @Result(property = "detectTime", column = "检测时间"),
            @Result(property = "detectType", column = "检测结果类型"),
            @Result(property = "confidence", column = "置信度"),
            @Result(property = "detectImage", column = "检测后图片"),
            @Result(property = "inferenceTime", column = "推理时间")
    })
    @Select("SELECT id, `检测时间`, `检测结果类型`, `置信度`, `检测后图片`, `推理时间` FROM sitting ORDER BY `检测时间` DESC")
    List<Sitting> listAll();

    /**
     * 分页查询坐姿检测记录
     * @param offset 偏移量
     * @param limit 每页数量
     */
    @ResultMap("SittingMap")
    @Select("SELECT id, `检测时间`, `检测结果类型`, `置信度`, `检测后图片`, `推理时间` FROM sitting ORDER BY `检测时间` DESC LIMIT #{limit} OFFSET #{offset}")
    List<Sitting> listByPage(@Param("offset") int offset, @Param("limit") int limit);

    /**
     * 统计总记录数
     */
    @Select("SELECT COUNT(*) FROM sitting")
    Long countAll();

    /**
     * 按时间范围查询
     * @param startTime 开始时间
     * @param endTime 结束时间
     */
    @ResultMap("SittingMap")
    @Select("SELECT id, `检测时间`, `检测结果类型`, `置信度`, `检测后图片`, `推理时间` FROM sitting WHERE `检测时间` BETWEEN #{startTime} AND #{endTime} ORDER BY `检测时间` DESC")
    List<Sitting> listByTimeRange(@Param("startTime") String startTime, @Param("endTime") String endTime);
}

